package com.live555.sava264;

import com.live555.callback.IH264ByteInputCallBack;

/**
 * 功能描述：单例模式管理一个回调对象，实现不同组件的实时通讯,h264文件的存储
 *
 * @author：ZC 创建时间：2017/5/8
 * 最后修改日期：
 */
public class H264FileSaveCallBackManager {

    private IH264ByteInputCallBack ih264ByteInputCallBack;


    public void setIh264ByteInputCallBack(IH264ByteInputCallBack ih264ByteInputCallBack) {
        this.ih264ByteInputCallBack = ih264ByteInputCallBack;
    }

    /***
     * 有需要存储的byte[]数据传入
     * @param fistCome 是否是第一次传入
     * @param frameBytes 具体的byte[]数据
     * @param msgStr 文件绝对路径
     */
    public void onH264FrameDataComeByUser(boolean fistCome, byte[] frameBytes, String msgStr) {
        if (ih264ByteInputCallBack != null) {
            ih264ByteInputCallBack.onH264FrameDataCome(fistCome, frameBytes, msgStr);
        }
    }

    /**
     * 私有化构造函数，防止被其他类实例化
     */
    private H264FileSaveCallBackManager() {
        //初始化操作
    }

    /**
     * 使用一个内部类来维护单例
     * 单例模式使用内部类来维护单例的实现。
     * 利用jvm提供的机制，加载类的线程互斥的，用来解决多线程访问的时候可能会遇到null的问题。
     **/
    private static class SingletonFactory {
        private static H264FileSaveCallBackManager instance = new H264FileSaveCallBackManager();
    }

    /**
     * 获取实例,对外提供的唯一接口
     */
    public static H264FileSaveCallBackManager getInstance() {
        return SingletonFactory.instance;
    }

    /**
     * 为了能在序列化过程仍能保持单例的特性，需要添加一个readResolve()方法
     */
    private Object readResolve() {
        return getInstance();
    }

}
